02-IAM-역할과정책심화
IAM 역할과정책심화
목표
IAM 역할(Role)과 정책(Policy)의 고급 기능을 학습하고, 실제 운영환경에서 사용되는 보안 패턴을 구현해봅시다.
IAM 역할 vs 사용자
사용자(User) vs 역할(Role) 비교
IAM 사용자:
- 장기간 유지되는 자격 증명
- Access Key, Secret Key 보유
- 특정 개인이나 애플리케이션에 할당
IAM 역할:
- 임시 자격 증명 사용
- AssumeRole을 통한 권한 위임
- 서비스 간 또는 크로스 계정 접근
역할 사용이 권장되는 경우
EC2 인스턴스:
❌ 잘못된 방법: Access Key를 인스턴스에 저장
✅ 올바른 방법: EC2에 IAM 역할 연결
서비스 간 통신:
❌ 잘못된 방법: Lambda에 하드코딩된 자격증명
✅ 올바른 방법: Lambda 실행 역할 사용
현재 실습 환경의 IAM 역할 분석
EC2 인스턴스 역할 확인
현재 EC2 인스턴스 역할 상태:
- EC2 콘솔 → 인스턴스 선택
- 보안 탭에서 IAM 역할 확인
- 대부분 역할이 없거나 기본 역할 사용
문제점:
- CloudWatch 에이전트 권한 부족
- S3 접근 시 Access Key 필요
- 보안 자격 증명 하드코딩 위험
실습: EC2 인스턴스용 IAM 역할 생성
1단계: CloudWatch 에이전트용 역할 생성
역할 생성:
- IAM → 역할 → 역할 생성
- 신뢰할 수 있는 엔터티 유형: AWS 서비스
- 사용 사례: EC2
- 다음 클릭
정책 연결:
- CloudWatchAgentServerPolicy 검색 및 선택
- AmazonSSMManagedInstanceCore 추가 선택
- 다음 클릭
역할 세부정보:
- 역할 이름:
WebApp-EC2-CloudWatch-Role - 설명:
EC2 instances role for CloudWatch monitoring - 역할 생성
2단계: WAS 서버에 역할 연결
기존 WAS 서버에 역할 적용:
- EC2 → 인스턴스 → WAS 서버 선택
- 작업 → 보안 → IAM 역할 수정
- IAM 역할:
WebApp-EC2-CloudWatch-Role선택 - IAM 역할 업데이트
적용 확인:
# WAS 서버에서 확인
ssh -i webapp-keypair.pem ec2-user@Web서버-Public-IP
ssh ec2-user@WAS서버-Private-IP
# 역할 자격 증명 확인
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
3단계: Launch Template 업데이트
새 버전 생성:
- EC2 → 시작 템플릿 →
webapp-web-template - 작업 → 템플릿 수정 (새 버전 생성)
- 고급 세부 정보 → IAM 인스턴스 프로파일
WebApp-EC2-CloudWatch-Role선택- 템플릿 버전 생성
Auto Scaling Group 업데이트:
- Auto Scaling 그룹 →
webapp-web-asg - 편집 → 시작 템플릿 → 최신 버전 선택
- 업데이트
정책 고급 기능
조건부 정책 (Conditional Policies)
시간 기반 접근 제어:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:*",
"Resource": "*",
"Condition": {
"DateGreaterThan": {
"aws:CurrentTime": "09:00Z"
},
"DateLessThan": {
"aws:CurrentTime": "18:00Z"
},
"ForAllValues:StringEquals": {
"aws:RequestedRegion": "ap-northeast-2"
}
}
}
]
}
IP 주소 기반 접근 제어:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"203.0.113.0/24",
"198.51.100.0/24"
]
}
}
}
]
}
리소스 기반 정책
S3 버킷 정책 예시:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ACCOUNT-ID:role/WebApp-EC2-CloudWatch-Role"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::webapp-assets/*",
"Condition": {
"StringEquals": {
"s3:ExistingObjectTag/Environment": "prod"
}
}
}
]
}
권한 경계 (Permission Boundaries)
권한 경계의 개념
권한 경계란:
- 사용자나 역할이 가질 수 있는 최대 권한을 제한
- 실제 권한 = (연결된 정책) ∩ (권한 경계)
- 권한 상승 공격 방지
실습: 개발자 권한 경계 설정
권한 경계 정책 생성:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:*",
"rds:Describe*",
"cloudwatch:*",
"logs:*"
],
"Resource": "*"
},
{
"Effect": "Deny",
"Action": [
"iam:*",
"organizations:*",
"billing:*"
],
"Resource": "*"
}
]
}
권한 경계 적용:
- IAM → 정책 → 정책 생성
- 위 JSON으로
Developer-Permission-Boundary생성 - 사용자 → 권한 경계 설정 → 정책 선택
모니터링 및 감사
CloudTrail을 통한 역할 사용 추적
주요 이벤트:
AssumeRole: 역할 사용 시작
AssumeRoleWithWebIdentity: 웹 자격 증명으로 역할 사용
GetSessionToken: 임시 토큰 발급
권한 사용 분석
IAM Access Analyzer 활용:
- IAM → Access Analyzer
- 액세스 미리 보기 → 정책 시뮬레이션
- 미사용 권한 분석 → 불필요한 권한 식별
완료 체크리스트
IAM 역할 구현
고급 정책 기능
모니터링 및 보안
운영 프로세스
보안 모범 사례 요약
역할 설계 원칙
- 최소 권한: 필요한 최소한의 권한만 부여
- 임시 자격 증명: 가능한 한 역할 사용
- 정기 검토: 분기별 권한 사용 패턴 분석
- 모니터링: 모든 권한 변경 추적
정책 작성 가이드라인
- 명시적 Deny: 중요한 작업은 명시적으로 차단
- 조건 활용: 시간, 위치, MFA 등 조건 적극 활용
- 리소스 특정: 가능한 한 특정 리소스 ARN 사용
- 테스트: 프로덕션 적용 전 충분한 테스트
IAM 역할과정책심화 완료
축하합니다! IAM의 고급 기능을 학습하고 실제 보안 강화를 위한 역할 기반 권한 관리 체계를 구축했습니다. 이제 엔터프라이즈급 보안 수준의 권한 관리가 가능합니다.
Week 4 전체 과정이 완료되었습니다! 모니터링, 비용 최적화, IAM 보안 강화를 통해 실제 운영 가능한 수준의 클라우드 인프라를 완성했습니다.
관련 문서: AWS EDU/Archive/조선대학교 AWS 멘토링/Week4-Operations-and-Optimization/03-IAM-정책심화/01-최소권한원칙, AWS EDU/Archive/조선대학교 AWS 멘토링/Week4-Operations-and-Optimization/README